//读取提交作业名单，输出未提交人员名单
//引入fs模块
let fs = require('fs')
//所有人员名单
const web17Students = [
  '毕贤',
  '陈冬冬',
  '陈海涛',
  '郭琦',
  '黄艺德',
  '孙康迪',
  '王为',
  '吴江鹏',
  '叶涛',
  '袁兆军',
  '占旭',
  '张成伟',
  '周锦雄',
  '胡来亮'
]
//匹配汉字的正则表达式
let reg = new RegExp('[\u4e00-\u9fa5]', 'g')

/**
 * 1、判断路径是否存在
 * @param path 文件路径
 */
function isDirExist(path) {
  return new Promise((resolve, reject) => {
    //access是异步操作
    fs.access(path, (err) => {
      //当异常对象存在，说明读取出问题了
      if (err) {
        console.log(`路径:${path}----不存在`)
        reject(false)
      } else {
        console.log(`路径:${path}----存在`)
        resolve(true)
      }
    })
  })
}

/**
 * 2、判断文件目录是否是文件夹
 * @param path
 * @returns {Promise<unknown>}
 */
function stat(path) {
  return new Promise((resolve, reject) => {
    fs.stat(path, (err, stats) => {
      resolve(stats.isDirectory())
    })
  })
}

/**
 * 3、读取当前目录中的文件，生成一个数组对象
 * @param path
 */
function readDir(path) {
  let arr = []
  return new Promise((resolve, reject) => {
    fs.readdir(path, function(err, files) {
      //把名字从字符串中取出
      files.forEach(function(item) {
        let strs = item.match(reg)
        strs = strs.join('')
        arr.push(strs)
      })
      resolve(arr)
    })
  })
}

/**
 * 4、分离未提交作业的人员
 * @param arr
 */
function separate(arr) {
  let arr1 = []
  web17Students.forEach(item => {
    if (!arr.includes(item)) {
      arr1.push(item)
    }
  })
  return arr1
}

/**
 * 读取文件夹内容，分离数据
 * @param path
 * @returns {Promise<void>}
 */
async function read(path) {
  let unInputArr
  try {
    //判断路径是否存在
    let flag = await isDirExist(path)
    if (flag) {
      let flag1 = await stat(path)
      if (flag1) {
        //读文件夹中的内容，就是已交作业的人员名单
        let arr = await readDir(path)
        //和基础名单对比，取出未提交作业的人员
        unInputArr = separate(arr)
      }
    }
    console.log('路径是否存在:' + flag)
    console.log('web17班人数:' + web17Students.length)
    console.log('未交作业人数:' + unInputArr.length)
    console.log('未交作业人有:' + unInputArr)
  } catch (e) {
    //console.log(e)
  }
}
read('C:/Users/Administrator/Documents/HBuilderProjects/6月份学习/0617课堂代码/提交作业/6-16作业')
//1、构建项目
//2、编写search.js(不是服务器，可以不是http模块)
//3、准备资源 文件夹，基础数组，正则，导入fs模块
//4、编写判断路径是否存在的函数(Promise)--fs.access
//5、如果路径存在，执行路径是否是文件夹的判断(Promise)--fs.stat
//6、若果路径是文件夹，读取文件夹中所有内容，生成一个文件名称数组
//7、对读取的内容进行汉字的提取，生成名称数组
//8、对已提交的数组元素和基础数据的数组进行对比，提取未提交的人员名单
//9、输出格式化的信息